Laporan Praktikum Pemrograman Web 10
A. Migration untuk tabel majors
Buat migrasi database dengan menggunakan command berikut di terminal:
php artisan make:migration create_majors_table
Kemudian tambahkan kode berikut di function up():
Schema::create('majors', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
B. Migration untuk tabel students
Buat migrasi database dengan menggunakan command berikut di terminal:
code>php artisan make:migration create_students_tableKemudian tambahkan kode berikut di function up():
Schema::create('students', function (Blueprint $table) { $table->id(); $table->string('nim')->unique(); $table->string('name'); $table->text('address'); $table->foreignId('major_id')->constrained('majors')->onDelete('cascade'); $table->timestamps(); });C. Migration untuk tabel subjects
Buat migrasi database dengan menggunakan command berikut di terminal:
php artisan make:migration create_subjects_tableKemudian tambahkan kode berikut di function up():
Schema::create('subjects', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('sks'); $table->timestamps(); });D. Migration untuk tabel pivot student_subject
Buat migrasi database dengan menggunakan command berikut di terminal:
php artisan make:migration create_student_subject_tableKemudian tambahkan kode berikut di function up():
Schema::create('student_subject', function (Blueprint $table) { $table->id(); $table->foreignId('student_id')->constrained('students')->onDelete('cascade'); $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade'); $table->timestamps(); // Mencegah duplikasi kombinasi student_id dan subject_id $table->unique(['student_id', 'subject_id']); });Setelah semua migrasi telah dibuat dan disave, jalankan migrasi database dengan perintah terminal:
php artisan migrateA, Model Major
Buat model dengan menggunakan command berikut di terminal:
php artisan make:model MajorSetelah itu, masukkan kode berikut di model:
hasMany(Student::class); } }B. Model Student
Buat model dengan menggunakan command berikut di terminal:
php artisan make:model StudentSetelah itu, masukkan kode berikut di model:
belongsTo(Major::class); } // Relationship: Many Students belong to many Subjects public function subjects() { return $this->belongsToMany(Subject::class); } }C. Model Subject
Buat model dengan menggunakan command berikut di terminal::
php artisan make:model SubjectSetelah itu, masukkan kode berikut di model:
belongsToMany(Student::class); } }Langkah selanjutnya yaitu membuat sebuah seeder untuk memasukkan data ke dalam database.
A. Seeder untuk Major
Buat seeder dengan menggunakan command berikut di terminal: :
php artisan make:seeder MajorSeederSetelah itu, masukkan kode berikut di seeder:
'Teknik Informatika'], ['name' => 'Sistem Informasi'], ['name' => 'Teknik Komputer'], ['name' => 'Manajemen Informatika'], ]; foreach ($majors as $major) { Major::create($major); } } }B. Seeder untuk Subject
Buat seeder dengan menggunakan command berikut di terminal:
php artisan make:seeder SubjectSeederSetelah itu, masukkan kode berikut di seeder:
'Pemrograman Web', 'sks' => 3], ['name' => 'Database', 'sks' => 3], ['name' => 'Algoritma', 'sks' => 2], ['name' => 'Jaringan Komputer', 'sks' => 3], ['name' => 'Sistem Operasi', 'sks' => 2], ]; foreach ($subjects as $subject) { Subject::create($subject); } } }C.Seeder untuk Student
Buat seeder dengan menggunakan command berikut di terminal:
php artisan make:seeder StudentSeederSetelah itu, masukkan kode berikut di seeder
'20210001', 'name' => 'Ahmad Rizki', 'address' => 'Jl. Merdeka No. 1', 'major_id' => 1], ['nim' => '20210002', 'name' => 'Siti Nurhaliza', 'address' => 'Jl. Sudirman No. 15', 'major_id' => 1], ['nim' => '20210003', 'name' => 'Budi Santoso', 'address' => 'Jl. Pahlawan No. 8', 'major_id' => 2], ['nim' => '20210004', 'name' => 'Dewi Kartika', 'address' => 'Jl. Diponegoro No. 22', 'major_id' => 2], ['nim' => '20210005', 'name' => 'Eko Prasetyo', 'address' => 'Jl. Gatot Subroto No. 11', 'major_id' => 3], ]; foreach ($students as $studentData) { $student = Student::create($studentData); // Assign random subjects to each student $subjects = Subject::inRandomOrder()->take(rand(2, 4))->pluck('id'); $student->subjects()->attach($subjects); } } }D. Update DatabaseSeeder
Tambahkan kode berikut di DatabaseSeeder
call([ MajorSeeder::class, SubjectSeeder::class, StudentSeeder::class, ]); } }Setelah semua seeder dibuat dan di save, jalankan seeder dengan perintah terminal:
php artisan db:seedA. StudentController
Buat controller dengan perintah terminal berikut:
php artisan make:controller StudentControllertambahkan kode berikut di file kontroler
get(); return view('students.index', compact('students')); } public function show($id) { $student = Student::with(['major', 'subjects'])->findOrFail($id); return view('students.show', compact('student')); } public function create() { $majors = Major::all(); $subjects = Subject::all(); return view('students.create', compact('majors', 'subjects')); } public function store(Request $request) { $request->validate([ 'nim' => 'required|unique:students', 'name' => 'required', 'address' => 'required', 'major_id' => 'required|exists:majors,id', 'subjects' => 'required|array', 'subjects.*' => 'exists:subjects,id', ]); $student = Student::create($request->only(['nim', 'name', 'address', 'major_id'])); $student->subjects()->attach($request->subjects); return redirect()->route('students.index')->with('success', 'Student created successfully'); } public function edit($id) { $student = Student::with('subjects')->findOrFail($id); $majors = Major::all(); $subjects = Subject::all(); return view('students.edit', compact('student', 'majors', 'subjects')); } public function update(Request $request, $id) { $student = Student::findOrFail($id); $request->validate([ 'nim' => 'required|unique:students,nim,' . $student->id, 'name' => 'required', 'address' => 'required', 'major_id' => 'required|exists:majors,id', 'subjects' => 'required|array', 'subjects.*' => 'exists:subjects,id', ]); $student->update($request->only(['nim', 'name', 'address', 'major_id'])); $student->subjects()->sync($request->subjects); return redirect()->route('students.index')->with('success', 'Student updated successfully'); } public function destroy($id) { $student = Student::findOrFail($id); $student->subjects()->detach(); // Remove all subject relationships $student->delete(); return redirect()->route('students.index')->with('success', 'Student deleted successfully'); } }Langkah selanjutnya yaitu membuat views untuk menampilkan pada halaman website.
A.layout utama
Buat file pada resources/views/layouts/app.blade.php. kodenya adalah seperti berikut:
Student Management System @if(session('success')){{ session('success') }}@endif @yield('content')B. Index Students
Buat file pada resources/views/students/index.blade.php. kodenya adalah seperti berikut:
@extends('layouts.app') @section('content')Daftar Mahasiswa
Tambah Mahasiswa@endsection
@foreach($students as $student) NIM Nama Jurusan Mata Kuliah Total SKS Aksi @endforeach {{ $student->nim }} {{ $student->name }} {{ $student->major->name }} @foreach($student->subjects as $subject) {{ $subject->name }} @endforeach {{ $student->subjects->sum('sks') }} Detail Edit